home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / payloads / external / WindowsSyscall.py < prev   
Text File  |  2006-06-30  |  5KB  |  102 lines

  1. #--
  2. # Copyright (c) 2002,2003 Core Security Technologies, Core SDI Inc.
  3. # All rights reserved.
  4. #
  5. #    Unless you have express writen permission from the Copyright Holder, any
  6. # use of or distribution of this software or portions of it, including, but not
  7. # limited to, reimplementations, modifications and derived work of it, in
  8. # either source code or any other form, as well as any other software using or
  9. # referencing it in any way, may NOT be sold for commercial gain, must be
  10. # covered by this very same license, and must retain this copyright notice and
  11. # this license.
  12. #    Neither the name of the Copyright Holder nor the names of its contributors
  13. # may be used to endorse or promote products derived from this software
  14. # without specific prior written permission.
  15. #
  16. # THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE
  17. # LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
  18. # OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND,
  19. # EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  20. # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
  21. # ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU.
  22. # SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
  23. # SERVICING, REPAIR OR CORRECTION.
  24. #
  25. # IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL
  26. # ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE
  27. # THE SOFTWARE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
  28. # GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
  29. # OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
  30. # DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR
  31. # A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH
  32. # HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
  33. #
  34. # gera [at corest.com]
  35. #--
  36. # $Id: WindowsSyscall.py,v 1.1 2004/03/15 07:36:48 hdm Exp $
  37.  
  38. import inlineegg
  39.  
  40. class WindowsSyscall(inlineegg.StackBasedSyscall):
  41.     microClass = inlineegg.Microx86
  42.     STDCALL = 0
  43.     CCALL   = 1
  44.  
  45.     translation = {
  46.         # we need 1 to 1 args mapping for the simple translation to work
  47.         # we'll do better translation in the future
  48.         'exit':('kernel32.dll','ExitProcess',STDCALL),
  49.         'open':('msvcrt.dll','_open',CCALL),
  50.         'read':('msvcrt.dll','_read',CCALL),
  51.         'write':('msvcrt.dll','_write',CCALL),
  52.         'close':('msvcrt.dll','_close',CCALL)
  53.     }
  54.     def __init__(self, micro, LoadLibrary = 0, GetProcAddress = 0):
  55.         inlineegg.StackBasedSyscall.__init__(self, micro)
  56.         self.names={}
  57.  
  58.     def remember(self, name, addr):
  59.         code, var = self.micro.save(addr)
  60.         self.names[name] = var
  61.         return code
  62.  
  63.     def resolveDll(self, dllName):
  64.         # print "resolving %s" % dllName
  65.         code, addr = self.syscall('kernel32.dll','LoadLibrary', (dllName,))
  66.         code += self.remember(dllName, addr)
  67.         return code, addr
  68.  
  69.     def resolveFunction(self, dllName, functionName):
  70.         # print "resolving %s.%s" % (dllName, functionName)
  71.         if not self.names.has_key(dllName):
  72.             code, addr = self.resolveDll(dllName)
  73.         else:
  74.             code, addr = ('', self.names[dllName])
  75.  
  76.         more_code, addr = self.syscall('kernel32.dll','GetProcAddress',(addr, functionName,))
  77.         code += more_code
  78.         code += self.remember("%s.%s" % (dllName, functionName), addr)
  79.         return code, addr
  80.         
  81.     def resolve(self, dllName, functionName):
  82.         if not self.names.has_key(dllName):
  83.             code, addr = self.resolveDLL(dllName)
  84.         
  85.     def syscall(self, dllName, functionName, args, callingConvention = STDCALL):
  86.         # print "calling %s.%s" % (dllName, functionName)
  87.         if not self.names.has_key("%s.%s" % (dllName, functionName)):
  88.             code, addr = self.resolveFunction(dllName, functionName)
  89.         else:
  90.             code, addr = ('', self.names["%s.%s" % (dllName, functionName)])
  91.  
  92.         code += self.setArgs(args,notForTemps = (addr,))
  93.         code += self.micro.call(addr)
  94.         if callingConvention == self.STDCALL:
  95.             self.micro.unpush(len(args))
  96.  
  97.         return code, self.answer()
  98.  
  99.     def call(self, function, args):
  100.         dll, function, callingConvention = self.translation[function]
  101.         return self.syscall(dll,function,args, callingConvention)
  102.